﻿using System.Drawing;
using System.Globalization;

namespace Rsdn.Scintilla
{
	/// <summary>
	/// Мелкий классик для преобразования строки в цвет
	/// </summary>
	public static class StringHelper
	{
		private const char s_HexSign = '#';
		
		/// <summary>
		/// Непосредственно функция преобразования
		/// </summary>
		/// <param name="color">Описание цвета</param>
		/// <returns>Структура НЕТ</returns>
		/// <remarks>
		/// Поддерживаемые форматы:
		/// #XXXXXX - шеснадцетиричное число RGB по 2 символа на канал
		/// ddddddddd - десятичное число RGB по 3 символа на канал
		/// </remarks>
		public static Color StringToColor(this string color)
		{
			if (color[0] == s_HexSign)
			{
				var cbR = byte.Parse(color.Substring(1, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
				var cbG = byte.Parse(color.Substring(3, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
				var cbB = byte.Parse(color.Substring(5, 2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);
				return Color.FromArgb(cbR, cbG, cbB);
			}
			else
			{
				var cbR = byte.Parse(color.Substring(0, 3), NumberStyles.Integer, CultureInfo.InvariantCulture);
				var cbG = byte.Parse(color.Substring(3, 3), NumberStyles.Integer, CultureInfo.InvariantCulture);
				var cbB = byte.Parse(color.Substring(6, 3), NumberStyles.Integer, CultureInfo.InvariantCulture);
				return Color.FromArgb(cbR, cbG, cbB);
			}
		}
	}
}
